#ifndef AGV_MSGS_CONVERTER_H_
#define AGV_MSGS_CONVERTER_H_

#include <jsoncpp/json/json.h>
#include "ros_json_converter.h"

#include <agv_msgs/msg/agv_mode.hpp>
#include <agv_msgs/msg/agv_auto_status.hpp>
#include <agv_msgs/msg/bat_info.hpp>
#include <agv_msgs/msg/nav_type.hpp>
#include <agv_msgs/msg/agv_event_status.hpp>
#include <agv_msgs/msg/tape_sensors.hpp>
#include <agv_msgs/msg/rfid_sensor.hpp>
#include <agv_msgs/msg/read_in_puts_new.hpp>
#include <agv_msgs/msg/odometry_lite.hpp>
#include <agv_msgs/msg/lidar_calib_percent.hpp>
#include <agv_msgs/msg/qr_calib_percent.hpp>
#include <agv_msgs/msg/agv_odom_calib.hpp>
#include <agv_msgs/msg/drivers_info.hpp>
#include <agv_msgs/msg/ca_nopen_node_status.hpp>
#include <agv_msgs/msg/pose_with_confidence.hpp>
#include <agv_msgs/msg/map_png.hpp>
#include <agv_msgs/msg/calib_progress.hpp>
#include <agv_msgs/msg/avoid_obsta.hpp>
#include <agv_msgs/msg/avoid_obsta_info.hpp>
#include <agv_msgs/msg/status_response.hpp>

// #include <reflector_slam_ros/msg/reflector_list_pose.hpp>
// #include <reflector_slam_ros/msg/reflector_status.hpp>

#include <slam_ros_msgs/msg/mapdata_progress.hpp>
#include <slam_ros_msgs/msg/robot_status.hpp>
#include <slam_ros_msgs/msg/landmark_list_pose.hpp>


Json::Value agv_msgs_to_json(const agv_msgs::msg::AGVMode &msg);
Json::Value agv_msgs_to_json(const agv_msgs::msg::AgvAutoStatus &msg);
Json::Value agv_msgs_to_json(const agv_msgs::msg::BatInfo &msg);
Json::Value agv_msgs_to_json(const agv_msgs::msg::NavType &msg);
Json::Value agv_msgs_to_json(const agv_msgs::msg::AGVEventStatus &msg);
// Json::Value agv_msgs_to_json(const agv_msgs::msg::tape_sensors &msg);
// Json::Value agv_msgs_to_json(const agv_msgs::msg::rfid_sensor &msg);
Json::Value agv_msgs_to_json(const agv_msgs::msg::ReadInPutsNew &msg);
Json::Value agv_msgs_to_json(const agv_msgs::msg::OdometryLite &msg);
Json::Value agv_msgs_to_json(const agv_msgs::msg::LidarCalibPercent &msg);
Json::Value agv_msgs_to_json(const agv_msgs::msg::QrCalibPercent &msg);
Json::Value agv_msgs_to_json(const agv_msgs::msg::AgvOdomCalib &msg);
Json::Value agv_msgs_to_json(const agv_msgs::msg::DriversInfo &msg);
Json::Value agv_msgs_to_json(const agv_msgs::msg::CANopenNodeStatus &msg);
Json::Value agv_msgs_to_json(const agv_msgs::msg::PoseWithConfidence &msg);
Json::Value agv_msgs_to_json(const agv_msgs::msg::MapPng &msg);
Json::Value agv_msgs_to_json(const agv_msgs::msg::CalibProgress &msg);
Json::Value agv_msgs_to_json(const agv_msgs::msg::AvoidObsta &msg);
Json::Value agv_msgs_to_json(const agv_msgs::msg::AvoidObstaInfo &msg);
Json::Value agv_msgs_to_json(const agv_msgs::msg::StatusResponse &msg);

// Json::Value agv_msgs_to_json(const reflector_slam_ros::msg::ReflectorListPose &msg);
// Json::Value agv_msgs_to_json(const reflector_slam_ros::msg::ReflectorStatus &msg);

Json::Value agv_msgs_to_json(const slam_ros_msgs::msg::MapdataProgress &msg);
Json::Value agv_msgs_to_json(const slam_ros_msgs::msg::RobotStatus &msg);
Json::Value agv_msgs_to_json(const slam_ros_msgs::msg::LandmarkListPose &msg);

//个别std_msgs/geometry_msgs/sensor_msgs类型
Json::Value agv_msgs_to_json(const std_msgs::msg::ColorRGBA &msg);

Json::Value agv_msgs_to_json(const geometry_msgs::msg::PoseStamped &msg);
Json::Value agv_msgs_to_json(const geometry_msgs::msg::TwistStamped &msg);
Json::Value agv_msgs_to_json(const geometry_msgs::msg::Pose &msg);
Json::Value agv_msgs_to_json(const geometry_msgs::msg::Vector3 &msg);
Json::Value agv_msgs_to_json(const geometry_msgs::msg::PointStamped &msg);

Json::Value agv_msgs_to_json(const sensor_msgs::msg::JointState &msg);
Json::Value agv_msgs_to_json(const sensor_msgs::msg::PointCloud &msg);
Json::Value agv_msgs_to_json(const sensor_msgs::msg::LaserScan &msg);


#endif // AGV_MSGS_CONVERTER_H_